_______________________________________________________________________ Chapter 1: What's Really Happening 73 ________________________________________________________________________ CHAPTER TEN: MESSAGES The following chapter describes in detail all of the messages sent to HyperPAD's objects. It is divided into three sections, one for each type of object that can initially receive a message. Each section begins with a table describing the messages discussed in that section. At the end of this chapter is a table of common events that occur in HyperPAD, along with the list of messages sent when these events occur. ABOUT MESSAGES A message is a notification sent to an object indicating that something has happened in the HyperPAD system. For example, if you click the mouse on a button, the mouseUp message is sent to that button. Once sent, a message follows a predetermined path through the object hierarchy. The starting point into this path is either a button, field, or page. If the receiving object does not have a handler for a message, the message will be passed on to the next object in the hierarchy until either a handler is found for that message or it reaches HyperPAD. There are two types of messages that can be sent to objects. The first type is a notification message. This type of message is sent after an action has already occurred, and thus notifies the object of the event. The second type of message is sent before an action occurs. For example, when the user selects the Delete Button command from the Edit menu, the deleteButton message is sent to the current button. The button will not be deleted until the message has traveled through the object hierarchy and is received by HyperPAD. _______________________________________________________________________ Chapter 1: What's Really Happening 74 ________________________________________________________________________ MESSAGE SENT FROM COMMANDS In addition to the messages sent to objects, there are a few messages automatically sent by their command counterparts. You can create handlers for them. The implementation for these messages is defined in HyperPAD itself. beep close flushCache fxshow noSound play playBack record setDefaultPopupColors setPopupColors sound wait You can find descriptions of these commands in Chapter Eleven, "Commands." MESSAGES SENT TO A BUTTON This section lists all of the messages that are initially sent to buttons. In other words, a button is a possible entry point into the object hierarchy for these messages. If the receiving button does not contain a handler for the message, the message will be passed up the hierarchy until it reaches a handler for that message. If no handler is found, the message will eventually reach HyperPAD. The following table shows all of the messages sent to buttons. The column on the right indicates if the message is sent before or after the action occurs (i.e. results in an action when received by HyperPAD). Message: Message Type: --------------------------------------------------- closeButton after deleteButton before keyPress before mouseDown after mouseEnter after mouseLeave after _______________________________________________________________________ Chapter 1: What's Really Happening 75 ________________________________________________________________________ Message: Message Type: --------------------------------------------------- mouseStillDown after mouseUp after mouseWithin after newButton after openButton after select after, except with checkBox buttons ----------------------------------- CLOSEBUTTON This message is sent to a button when the focus is removed. A button loses the focus when the user moves the cursor by clicking the right mouse button outside the button's borders, or by pressing the TAB key or arrow keys to move to another object. The following example uses closeButton and openButton to change the border of a button, indicating when the button has the focus. handler closeButton; begin; set the edgeType of me to 1; end; handler openButton; begin set the edgeType of me to 2; end; ----------------------------------- DELETEBUTTON The deleteButton message is sent to a button when the user selects Cut Button or Delete Button from HyperPAD's menus. When this message reaches HyperPAD, the button is deleted. By intercepting the message, you can prevent buttons from being deleted. _______________________________________________________________________ Chapter 1: What's Really Happening 76 ________________________________________________________________________ For example, the following handler (in a button script) presents the user with a dialog box whenever Delete or Cut Button is selected, asking them if it is okay to delete the button. handler deleteButton; begin answer "Ok to delete button?" with "Yes", "No"; if it is "Yes" then pass; end; This example passes the message on to HyperPAD (to delete the button) only if the user answers "Yes" in the answer dialog box. ----------------------------------- KEYPRESS The keyPress message is sent to the button with the focus when any key is pressed. In the following example, pressing CTRL+ENTER selects the button: handler keyPress(k); begin if key(k) is "CTRL+ENTER" then send "select" to me else pass; end; ----------------------------------- MOUSEDOWN The mouseDown message is sent to the button when the mouse button is pressed while the mouse pointer is within the rectangle of the button. ----------------------------------- MOUSEENTER The mouseEnter message is sent to the button when the mouse pointer enters the button's borders. The mouse button does not have to be pressed for this message to be sent. (See the example under mouseLeave.) ----------------------------------- MOUSELEAVE The mouseLeave message is sent to the button when the mouse pointer exits the button's borders. This message will only be sent to objects that have first received a mouseEnter message. An interesting use for mouseEnter and mouseLeave is to highlight the button that the mouse pointer is currently on. _______________________________________________________________________ Chapter 1: What's Really Happening 77 ________________________________________________________________________ The following handlers in the button script will accomplish this: handler mouseEnter; begin set the hilite of me to true; end; handler mouseLeave; begin set the hilite of me to false; end; ----------------------------------- MOUSESTILLDOWN The mouseStillDown message is sent to a button continuously while the mouse button is held down. In order for this message to be sent, the mouse must have been initially pressed within the rectangle of the button. ----------------------------------- MOUSEUP The mouseUp message is sent to a button when the mouse button is released and the mouse pointer is within the button's border. The mouse pointer must be inside the original button where the mouse button was pressed. ----------------------------------- MOUSEWITHIN When the pointer is within the button's rectangle, the mouseWithin message is sent continuously. This message is sent after the initial mouseEnter message. ----------------------------------- NEWBUTTON This message is sent to a button when it is created, just after it appears on-screen. Usually, this message gets passed through the button up the object hierarchy unless the button is being pasted and has a script with a newButton handler. The following example handler in the pad script of your Home pad causes all new buttons to be colored red and have a double border: handler newButton; begin set the edgeType of the target to 2; set the color of the target to red; end; _______________________________________________________________________ Chapter 1: What's Really Happening 78 ________________________________________________________________________ ----------------------------------- OPENBUTTON This message is sent to a button when it receives the focus (is highlighted). A button receives the focus when the user presses TAB or the arrow keys to access it, or clicks a mouse button while the cursor is inside the button's border. The following example handler in a button script causes the button to have a double border when it has the focus: handler openButton; begin set the edgeType of me to 2; end; ----------------------------------- SELECT This message is sent to the button with the focus if you press ENTER, SPACE, or click the left mouse button while the cursor is inside the button's borders. In other words, this message is sent to a button when it is selected. Rather than using mouseUp handlers, create select handlers to perform actions when buttons are selected since not every HyperPAD user will use the mouse to select buttons. Below is an example of a button script that uses the select handler: handler select; begin go to the next page; end; The select message has special meaning for check box buttons. When the user toggles the check of the button (by pressing ENTER or clicking the button with the mouse), the select message is sent to that button. When the message is received by HyperPAD, the check of the button is toggled. By intercepting the select message, you can customize the behavior of check box buttons. For example, the following handler in the button script prevents the button's check mark from being changed because the message is not passed on to the next object in the hierarchy. handler Select; begin end; _______________________________________________________________________ Chapter 1: What's Really Happening 79 ________________________________________________________________________ The next example toggles the message box on and off in coordination with the check mark of the button: handler select; begin set the visible of msg to not the check of me; pass; end; MESSAGES SENT TO FIELDS The following messages are initially sent to fields. If the receiving field does not contain a handler for the message, the message will be passed up the hierarchy until it reaches an appropriate handler. If no handler is found, the message will eventually reach HyperPAD. The column on the right indicates if the message is sent before or after the action occurs (i.e. results in an action when received by HyperPAD). These messages are sent to fields: Message: Message Type: --------------------------------------------------- closeField after deleteField before keyPress before mark before (for list box fields only) mouseDown after mouseEnter after mouseLeave after mouseStillDown after mouseUp after mouseWithin after newField after openField after select after unmark before (for list box fields only) _______________________________________________________________________ Chapter 1: What's Really Happening 80 ________________________________________________________________________ ----------------------------------- CLOSEFIELD This message is sent to an unlocked field (one that can be edited) when the focus is taken away. The focus is removed from a field when it is exited by using TAB, the arrow keys, or the mouse. The focus may also be changed from within a script. The following example uppercases the contents of a field when the focus is taken away: handler closeField; begin put upper(the value of me) into me; end; See Also: openField ----------------------------------- DELETEFIELD The deleteField message is sent when the user selects Cut Field or Delete Field from the Edit menu. By intercepting this message, you can prevent fields from being deleted. The following handler in a field's script checks to make sure it is okay to delete the field. handler deleteField; begin answer "Ok to delete field" && the name of me; if it is "Ok" then pass; end; ----------------------------------- KEYPRESS The keyPress message is sent to the field with the focus when a key is pressed. By intercepting this message, you prevent keys from reaching the field or HyperPAD. For example, you can create a field that does not allow numbers, as in the following handler: handler keyPress(keyNum); begin get key(keyNum); if it is not in "1234567890" then pass; end; See Appendix 2, "Key Codes," for details on keyPress key values. _______________________________________________________________________ Chapter 1: What's Really Happening 81 ________________________________________________________________________ ----------------------------------- MARK The mark message is sent to list box fields when the user attempts to mark a line by pressing SPACE or the right mouse button. You can prevent lines from being marked by intercepting this message and not passing it. The line number being marked is passed as a parameter with this message. As an example, the following handler keeps track of how many lines are marked, allowing a maximum of ten: handler mark(lineNumber); begin global numMarked; if numMarked < 10 then begin add 1 to numMarked; pass; end; end; handler unmark(lineNumber); begin global numMarked; subtract 1 from numMarked; pass; end; Note: See the section on fields in the User's Guide for more information on list box fields. See Also: markerChar, unmark, markerAttr ----------------------------------- MOUSEDOWN The mouseDown message is sent to locked fields (fields that can not be edited) when the user presses the left mouse button while the mouse pointer is within the field's borders. ----------------------------------- MOUSEENTER This message is sent to a field when the mouse pointer is within the rectangle of a field. _______________________________________________________________________ Chapter 1: What's Really Happening 82 ________________________________________________________________________ ----------------------------------- MOUSELEAVE This message is sent when the mouse pointer exits the boundaries of a field. ----------------------------------- MOUSESTILLDOWN The mouseStillDown message is sent to a locked field (uneditable field) while the left mouse button is held down. This message will only be sent if the mouse was initially pressed within the rectangle of the field. ----------------------------------- MOUSEUP The mouseUp message is sent to a locked field (uneditable field) when the left mouse button is released and the mouse pointer is within the field's borders. The mouse pointer must be within the same field that received the initial mouseDown message. If you click the mouse on an unlocked text field, the field will be given the focus and opened for editing. ----------------------------------- MOUSEWITHIN The mouseWithin message is sent to a field continuously while the mouse pointer is within the rectangle of the field. ----------------------------------- NEWFIELD The newField message is sent to a field when it is created, just after it appears on-screen. Usually, this message gets passed up the object hierarchy unless the field is being pasted and has a script with a newField handler. This handler, which causes all new fields to look like typical database fields with the name appearing on the left, belongs in the pad script: handler newField; begin set the showName of the target to true; set the withEdge of the target to false; set the rect of the target to 10,10,30,10; set the hiliteIfFocus of the target to true; end; _______________________________________________________________________ Chapter 1: What's Really Happening 83 ________________________________________________________________________ ----------------------------------- OPENFIELD The openField message is sent to an unlocked field (one that can be edited) when it receives the focus (opened for editing). A field receives the focus when it is entered using TAB, the arrow keys, or the mouse. The focus may also be sent to that field from a script or the message box. The following example keeps track of the last time a field was updated: handler openField; begin global previous_content; put the value of me into previous_content; end; handler closeField; begin global previous_content; if previous_content is not the value of me then put date() into field "last updated"; end; ----------------------------------- SELECT This message is sent to list box fields when the user presses ENTER or double clicks the mouse on a line in the field, and it is sent to locked fields when the user releases the mouse button. Use this message to perform actions when the user selects an item from a list box. For example: handler select; begin get the currentLine of me; get line it of the value of me; ask "You have selected" && it; end; _______________________________________________________________________ Chapter 1: What's Really Happening 84 ________________________________________________________________________ ----------------------------------- UNMARK This message is sent to list box fields when the user attempts to unmark a line by pressing SPACE or the right mouse button. Prevent lines from being unmarked by intercepting this message and not passing it. The line being unmarked is passed as a parameter. Examples: The following unmark handler prevents the user from unmarking all the even lines (if they are marked). handler unMark(lineNum); begin if lineNum mod 2 is not zero then pass; end; Note: See the section on fields in the User's Guide for more information on list box fields. See Also: mark, markerChar, markerAttr _______________________________________________________________________ Chapter 1: What's Really Happening 85 ________________________________________________________________________ MESSAGES SENT TO A PAGE This section describes messages received directly by the page. If the receiving page does not contain a handler for the message, the message will be passed up the hierarchy to the background and so on until it reaches an appropriate handler. If no handler is found, the message will eventually reach HyperPAD. The following table lists all of the messages and indicates if the message is sent before or after an action occurs(i.e. results in an action when received by HyperPAD). Message: Type: Message: Type: ----------------------------------------------------------------------- break after mouseStillDown after cancel after mouseUp after closePad after newBackground after closePage after newPad after deleteBackground before newPage after deletePad before openPad after doMenu before quit before help before resume after idle after startUp after keyPress before suspend before mouseDown after ----------------------------------- BREAK This message is sent to the current page when the user presses CTRL+BREAK. The combination CTRL+BREAK stops the execution of any pending handlers. CTRL+BREAK also stops many other processes, including sort, query, print, find, import, and export. A break handler can be useful if you need to perform any cleanup when one of these tasks is interrupted. _______________________________________________________________________ Chapter 1: What's Really Happening 86 ________________________________________________________________________ For example, the following break handler cleans up if a find command was interrupted. This handler belongs in a button script: handler select; begin global inFind; ask "Find what?"; if it is empty then exit; put true into inFind; find it; put false into inFind; end; This handler belongs in the page script: handler break; begin global inFind; if inFind then answer "Find aborted!" with "Ok"; end; Comments: Another way to stop the execution of all pending handlers is with the exit command: exit to hyperpad; See Also: keyPress ----------------------------------- CANCEL The cancel message is sent to the current page when the ESC key is pressed. This is used to maintain compatibility with the HyperPAD User Interface in which ESC takes you back. The following example goes Home when the user presses ESC: handler cancel; begin go home; end; ----------------------------------- CLOSEPAD The closePad message is sent to the current page before the pad is closed and disappears. This can happen when the user quits, changes to another pad, or runs another program. _______________________________________________________________________ Chapter 1: What's Really Happening 87 ________________________________________________________________________ You can use closePad to perform any pad cleanup that may be necessary before you leave a pad. The following handler uses that opportunity to delete the contents of some fields: handler closePad; begin put empty into field "time"; put empty into field "status"; end; See Also: openPad, openPage, closePage ----------------------------------- CLOSEPAGE The closePage message is sent to the current page when you go to another page, go to another pad, run another program, or quit HyperPAD. The following example uses a closePage handler to hide some buttons. Next time this page is accessed, the buttons will not be visible: handler closePage; begin set the lockScreen to true; hide button id 6; hide button "Quit"; end; See Also: closePad, openPage ----------------------------------- DELETEBACKGROUND The deleteBackground message is sent to the current page right before a background is deleted. You can only delete a background after all the pages using it are deleted or cut. By intercepting this message, you control whether a background is deleted. The following example allows a background to be deleted only if the user's name is "John": handler deleteBackground; begin ask "What is your name?"; if it is "John" then pass; end; _______________________________________________________________________ Chapter 1: What's Really Happening 88 ________________________________________________________________________ ----------------------------------- DELETEPAD This message is sent to the current page when the user selects Delete Pad from the File menu. Since this message is sent before the pad is deleted you can prevent deletion by intercepting this message. The following example makes a backup of the current pad (with the same name as the current pad, but with a DEL file extension) before it is deleted: handler deletePad; begin get the name of pad; put ".DEL" after it; record it & "{enter}"; playback; doMenu "Save a Copy..."; pass; end; ----------------------------------- DELETEPAGE The deletePage message is sent to a page when the user selects Delete or Cut Page from the Edit menu. This message is sent before the page is actually deleted. The page will only be deleted if this message is received by HyperPAD. By intercepting deletePage, you prevent the page from being deleted. The following handler intercepts deletePage to make sure that a linked page gets deleted too. It first saves the current page, then gets a linked page number from a field called "Attached Page Number". It then goes to that page and deletes it. handler deletePage; begin get field "Attached Page Number"; push this page; go to page "linked"; send "doMenu" "Delete Page" to this page; pop page; pass; end; _______________________________________________________________________ Chapter 1: What's Really Happening 89 ________________________________________________________________________ The following handler intercepts deletePage to first make a copy of the page in another pad called "backup": handler deletePage; begin doMenu "Copy Page"; push this page; go to pad "backup"; doMenu "Paste Page"; pop page; pass; end; See Also: deletePad, deleteBackground ----------------------------------- DOMENU The doMenu message is sent to the current page when the user selects a command from a menu. The exact text of the menu choice is sent with the message as a parameter. Intercepting doMenu is a powerful way to customize HyperPAD. You can redefine the actions taken when a user selects commands from the menu. The following example shows how to redefine the File Exit command. All other menu commands will work normally. handler doMenu(command); begin if command is "Exit" then beep else pass; end; You can also select menu commands artificially, as is done in the following handler in a button script: handler select; begin doMenu "Printer Setup..."; doMenu "Page Setup..."; doMenu "Print..."; end; Note: The menu command must be represented exactly as it appears on HyperPAD's menu. _______________________________________________________________________ Chapter 1: What's Really Happening 90 ________________________________________________________________________ ----------------------------------- HELP The help message is sent to the current page when the user presses F1 or selects Help from the Go menu. By intercepting this message, you can create your own help for your pads. If this message reaches HyperPAD, HyperPAD's Help system will be loaded. In the following example, the user is asked which help is preferred, the local (yours) or the main HyperPAD Help system: handler help; begin answer "Which help?" with "Local", "HyperPAD"; if it is "Local" then go to page "Local Help" else pass; end; You can send the help message from within a script in order to go to HyperPAD's help: handler select; begin help; end; ----------------------------------- IDLE This message is sent to the current page continuously when HyperPAD has no other messages to pass and no other scripts are currently executing. This message is only sent when the Browse tool is in use. Be cautious when creating idle handlers. Since the idle message is sent so frequently, the script will execute many times, greatly slowing down the overall performance of your pad. A good use of the idle message is to display the time in a field. The following handler in the pad script will do so (make sure you create a background field named "time" before trying this): handler idle; begin put the time into field "time"; end; _______________________________________________________________________ Chapter 1: What's Really Happening 91 ________________________________________________________________________ Directly before the idle message is sent, the following actions are performed: 1. The printerTranslation property is set to false. 2. The lockScreen property is set to false. If the previous value was not false, then the screen is redrawn. 3. The lockRecent property is set to false. 4. The lockMessages property is set to false. 5. The numberForm at property is set back to its default: "0.######". 6. The visual effect is disabled. Note: If you have a runtime error in your idle handler, the only way to fix it is to select "Script" in the runtime error box. ----------------------------------- KEYPRESS The keyPress message is sent directly to the page if a key is pressed and no button or field has the focus. (This condition exists if the mouse is clicked outside of all buttons and fields.) The key is passed along with the message in its numeric format. The keyPress message is only sent while the Browse tool is active. If you want a key on you keyboard to perform some action, regardless of the current button or field, put a keyPress handler in the page. Be cautious when intercepting the keyPress message. You can easily lock yourself out of HyperPAD. For example, the following handler in your pad script makes your keyboard useless within HyperPAD: handler keypress(k); begin end; Since this handler does not pass the keyPress message on, the keyboard will appear inactive. If you have a mouse, you will be able to access and change the script, otherwise you will have to re-boot your machine (by turning your machine off) and possibly lose some data. To safeguard against this condition, you can create the following break handler in every script containing a keyPress handler: handler break; begin edit the script of me; end; _______________________________________________________________________ Chapter 1: What's Really Happening 92 ________________________________________________________________________ Thus, if you made a mistake in your keyPress handler, you can always press CTRL+BREAK to edit the script. The following keyPress handler processes the F11, F12, and CTRL+V keystrokes, and passes any other keystroke up the object hierarchy: handler keypress(keyNumber); begin get key(keyNumber); case it of "f11" : go to page "help"; "f12" : go to page "index"; "ctrl+v" : ; otherwise : pass; end; end; See Also: key ----------------------------------- MOUSEDOWN The mouseDown message is sent to the current page when the user presses the mouse button and the mouse pointer is not within the boundaries of any button or field. When the user releases the mouse button, the mouseUp messsage is sent. ----------------------------------- MOUSESTILLDOWN The mouseStillDown message is sent to the current page continuously while the mouse button is held down. This message will be sent directly to the current page only if the mouse button was initially pressed outside of any buttons or fields. ----------------------------------- MOUSEUP The mouseUp message is sent to the current page when the mouse button is released. This message will be sent directly to the current page only if the mouse button was initially pressed outside of any button or field's border. ----------------------------------- NEWBACKGROUND The newBackground message is sent to the current page when a background is created. (This message is sent to the new page of the new background, not the page that was current when the New Background command was selected.) You can put a handler for the newBackground message either in the current pad script or the pad script of your Home pad. _______________________________________________________________________ Chapter 1: What's Really Happening 93 ________________________________________________________________________ ----------------------------------- NEWPAD The newPad message is sent to the new page of a pad after it is created. The only appropriate place for newPad handlers is in the pad script of the Home pad because new pads initially have no scripts. ----------------------------------- NEWPAGE The newPage message is sent to a page when it is created, just after it appears on screen. This message is usually passed up the hierarchy, unless the page has been pasted and has a newPage handler. The following pad script names each new page according to the creation time and date. handler newPage; begin set the name of this page to date() && time(); end; ----------------------------------- OPENPAD The openPad message is sent to the default page of a newly opened pad, just after it is displayed. Use this message to perform any initialization that your pad may require, like the following example: handler openPad; begin global taxTotal,salesTotal; put 0 into taxTotal; put 0 into salesTotal; put empty into page field "first name"; put 0.07 into page field "Sales Tax"; hide page button 5; end; See Also: closePad, openPage, closePage _______________________________________________________________________ Chapter 1: What's Really Happening 94 ________________________________________________________________________ ----------------------------------- OPENPAGE The openPage message is sent to a page just after it becomes the current page. The following example uses openPage to set the focus to a default button: handler openPage; begin set the focus to page button "Pick"; end; ----------------------------------- QUIT This message is sent to the current page when the user selects Exit from the File menu. By intercepting this message, you can prevent the user from quitting HyperPAD. You can also send a quit message, causing HyperPAD to return to DOS. The following handler quits HyperPAD and returns to DOS: handler select; begin answer "Are you sure you want to quit?"; if it is "Ok" then quit; end; The next example intercepts the quit message and goes to a pad called "phone" instead. handler quit; begin go to pad "phone"; end; ----------------------------------- RESUME The resume message is sent to the current page when HyperPAD resumes execution after running another program. After running other programs, HyperPAD will not complete execution of the script containing the run command. In the following example, the resume handler performs the actions that normally would not be executed after a run command: _______________________________________________________________________ Chapter 1: What's Really Happening 95 ________________________________________________________________________ Put this handler in a button: handler select; begin run "C:\COMMAND.COM"; beep; -- this NEVER gets executed end; This handler belongs in the page: handler resume; begin beep; end; See Also: startUp, openPage, openPad ----------------------------------- STARTUP The startUp message is sent to the first page displayed when HyperPAD is run for the first time that session. ----------------------------------- SUSPEND This message is sent to the current page just before the user runs another program. This occurs when "Run Program" is selected from the File menu or the run command is executed in a script. By intercepting this message, you can prevent HyperPAD from launching other programs. In the following pad script, the suspend handler remembers the disk space so it can monitor how much space the launched program required: handler suspend; begin put the diskSpace into page field "saved disk space"; pass; end; handler resume; begin get the diskSpace-page field "saved disk space"; if it 0 then answer "Your program used" && it && "bytes"; end; _______________________________________________________________________ Chapter 1: What's Really Happening 96 ________________________________________________________________________ COMMON MESSAGE GROUPINGS Sometimes it is difficult to know what messages are being sent during common everyday operations. The following section describes some basic operations and the messages that HyperPAD sends. These messages are sent when the user starts HyperPAD: Message: Sent To: -------------------------------------------------------------- startUp current page openPad current page openPage current page openButton/openField current button or field These messages are sent when the user runs another program: Message: Sent To: -------------------------------------------------------------- closeButton/closeField current button or field closePage current page closePad current page suspend current page These messages are sent when the user returns from running another program: Message: Sent To: -------------------------------------------------------------- resume current page openPad current page openPage current page openButton/openField default button or field When the user presses the ESC key, these messages are sent: Message: Sent To: -------------------------------------------------------------- keypress 283 current object cancel current page _______________________________________________________________________ Chapter 1: What's Really Happening 97 ________________________________________________________________________ When the key combination ALT+F5 is pressed, these messages are sent: Message: Sent To: -------------------------------------------------------------- keyPress 27648 current object doMenu "Home" current page When TAB is pressed to go one button to another button, these messages are sent: Message: Sent To: -------------------------------------------------------------- closeButton current button openButton new current button When you press PGDN to go to the next page, these messages are sent: Message: Sent To: -------------------------------------------------------------- keyPress 20736 current object doMenu "Next" current page closeButton/closeField current object closePage new current page openButton/openField new current object When you click the mouse on a button, these messages are sent: Message: Sent To: -------------------------------------------------------------- mouseUp current object select current object